package com.xzc.jcip._3_.对象的共享.对象发布;

import java.awt.*;

/**
 * 在构造函数中启动线程或事件监听器，且这些东西很可能被另外一个线程调用时
 * 可以私有化构造方法，然后用公开的工厂来发布对象
 * 从而在工厂中构造完成以后再去发布对象
 */
public class SafeListener {
    private final ThisEscape.EventListener listener;

    private SafeListener() {
        listener = new ThisEscape.EventListener() {
            @Override
            public void onEvent(Event e) {
                doSomething(e);
            }
        };
    }

    private void doSomething(Event e) {
        System.out.println(e.id);
    }

    public static SafeListener newInstance(EventSource source) {
        SafeListener safeListener = new SafeListener();
        source.registerListener(safeListener.listener);
        return safeListener;
    }
}
